package com.yiwyn.ood.dip;

import java.util.HashMap;
import java.util.Map;

public class DIPGoodDemo {

    public static void main(String[] args) {
        PayService payService = new PayService();
        payService.consume();
    }

    /**
     * 支付服务-高层
     */
    static class PayService {
        /**
         * 这里payService层直接调用了底层逻辑，若逻辑
         */
        public void consume() {
            IPay pay = AppConfig.getPay();
            pay.pay();
            pay.queryPayResult();
        }
    }

    /**
     * 模拟系统配置
     */
    static class AppConfig {
        // 读取系统配置
        private static final String payChannel = System.getProperty("payChannel", "AliPay");
        // 支付信息实现
        private static final Map<String, IPay> payMap = new HashMap<>();

        static {
            payMap.put("AliPay", new AliIPay());
            payMap.put("WxPay", new WxIPay());
        }

        public static IPay getPay() {
            return payMap.get(payChannel);
        }
    }

    /**
     * 支付接口
     */
    interface IPay {

        void pay();

        void queryPayResult();
    }


    /**
     * 阿里支付-低层
     */
    static class AliIPay implements IPay {

        @Override
        public void pay() {
            System.out.println("阿里支付");
        }

        @Override
        public void queryPayResult() {
            System.out.println("阿里支付结果查询");
        }


    }

    /**
     * 微信支付-低层
     */
    static class WxIPay implements IPay {

        @Override
        public void pay() {
            System.out.println("微信支付");
        }

        @Override
        public void queryPayResult() {
            System.out.println("微信支付结果查询");
        }

    }
}
